import math
import scipy.integrate as integrate
import scipy.interpolate as interpolate
import matplotlib.pyplot as plt
import libraries.filereader as filereader
import scipy

with open('ne_5.txt', 'r') as file:
    fileData = filereader.interpolateFromFile(file)
    neCentral = lambda x: (fileData(x) * 2.1 * pow(10, 13))

with open('Te0_10050.txt', 'r') as file:
    TeCentral = filereader.interpolateFromFile(file)

# temperatureX = [
#     -22.5,
#     -14.8,
#     -10.4,
#     -7.3,
#     0,
#     7.3,
#     10.4,
#     14.8,
#     22.5
# ]
# temperatureY = [
#     60,
#     212.2243,
#     330.93854,
#     396.96271,
#     401.09436,
#     396.96271,
#     330.93854,
#     212.2243,
#     60
# ]
# temperature = scipy.interpolate.interp1d(temperatureX, temperatureY)


def calculateRadiation(t):
    # данные для апроксимации электронной концентрации и температуры
    nePeriphery = 0
    TePeriphery = 60

    constant_formula = 1.9 * 10 ** -28  # константа перед интегралом
    gaunt_factor = 2
    omega = math.pi * (2.75 ** 2) / 110 ** 2  # телесный угол

    radiusA = 22.5  # малый радиус такомака туман
    distanceFromDiagnosticsToTokomak = 19.6  # раастояние от диагностики до токамака
    distanceFromTokomakToPlasma = 2.5  # раастояние от токамака до плазмы

    # объём
    # радиус окружности на столбе токамака, куда смотрит диагностика
    volume = omega / 3 * (
            (radiusA + radiusA + distanceFromDiagnosticsToTokomak + distanceFromTokomakToPlasma) ** 3 - (distanceFromDiagnosticsToTokomak + distanceFromTokomakToPlasma) ** 3)

    # аппроксимация электронной концентрации
    density = lambda x: (neCentral(t) - nePeriphery) * ((1 - (abs(x) / radiusA) ** 2) ** 2) + nePeriphery

    # аппроксимация электронной температуры

    temperature = lambda x: (TeCentral(t) - TePeriphery) * ((1 - (abs(x) / radiusA) ** 3.5) ** 3.5) + TePeriphery

    # граници интегрирования по лямда
    lambda1 = 0.9
    lambdaMax = 6200 / temperature(0)

    # densityFile = open('24032706-density' + str(t) + '.txt', 'w')
    # temperatureFile = open('24032706-temperature' + str(t) + '.txt', 'w')
    #
    # smallRadiusArray = list(range(0, 23))
    #
    # densityArray = list(map(density, smallRadiusArray))
    # plt.subplot(121)
    # plt.grid(True)
    # plt.plot(smallRadiusArray, densityArray)
    #
    # temperatureArray = list(map(temperature, smallRadiusArray))
    # plt.subplot(122)
    # plt.grid(True)
    # plt.plot(smallRadiusArray, temperatureArray)
    #
    # plt.savefig('profiles_chart.png')
    # plt.show()

    # for i in range(len(smallRadiusArray)):
    #     densityFile.write(str(smallRadiusArray[i]) + ' ' + str(densityArray[i]) + '\n')
    #     temperatureFile.write(str(smallRadiusArray[i]) + ' ' + str(temperatureArray[i]) + '\n')

    f = lambda R, L: (
            constant_formula * gaunt_factor * omega * volume * density(R) ** 2 / (math.sqrt(temperature(R)) * L ** 2) *
            math.exp(-12395 / (L * temperature(R)))
    )
    result = integrate.dblquad(f, lambda1, lambdaMax, -1 * radiusA, radiusA)

    return result[0]

calculateRadiation(55)